Problem
【APIO2011】方格染色
Description
和他的妹妹有一个包含个方格的表格。她们想要将其的每个方格都染成红色或蓝色。
出于个人喜好,他们想要表格中每个的方形区域都包含奇数个(个或个)红色方格。 可是昨天晚上,有人已经给表格中的一些方格染上了颜色!
现在和非常生气。不过,他们想要知道是否可能给剩下的方格染上颜色,使得整个表格仍然满足她们的要求。
如果可能的话,满足他们要求的染色方案数有多少呢?
Input
输入的第一行包含三个整数, 和,分别代表表格的行数、列数和已被染色的方格数目。
之后的行描述已被染色的方格。其中第行包含三个整数, 和,分别代表第个已被染色的方格的行编号、列编号和颜色。为表示方格被染成红色,为表示方格被染成蓝色。
Output
Sample Input
1 | 3 4 3 |
Sample Output
1 | 8 |
Hint
对于所有的测试数据,, , , 。
数据为国内数据+国际数据+修正版
鸣谢GYZ
标签:带权并查集
异或方程组
Solution
并查集解异或方程组。
令表示第行第列的格子最终是否被染,对于,一定有。而易得到结论:确定一行一列的情况,即可确定最后是否能正确染色。
于是我们尝试确定第一行和第一列的情况,即做一个个变量的异或方程组。
对于给定的,我们如果把的所有上一段所属方程异或起来,那么相同元抵消,可知,如果我们知道,那么就能确定的值,这时用一个带权并查集维护一下,即可得到联通块的个数。那么答案为(所在联通块的取值是一定的)。
如果我们预先不知道的值,就可以枚举两种取值,分别计算后加起来即可。
Code
1 |
|